package com.geoloqi;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.UUID;
import android.content.Context;
import android.util.Pair;
public class Installation {
private static Pair<Long, Long> uuid;
private static final String FILE = "INSTALLATION";
private static void writeUUID(File installation) {
try {
UUID uuid = UUID.randomUUID();
DataOutputStream out = new DataOutputStream(new FileOutputStream(installation));
out.writeLong(uuid.getMostSignificantBits());
out.writeLong(uuid.getLeastSignificantBits());
out.close();
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static Pair<Long, Long> getUUID(Context context) {
if (uuid != null) {
return uuid;
} else {
File uuidFile = new File(context.getFilesDir(), FILE);
if (!uuidFile.exists()) {
writeUUID(uuidFile);
}
uuid = readUUID(uuidFile);
return uuid;
}
}
public synchronized static byte[] getIDAsBytes(Context context) {
try {
Pair<Long, Long> uuid = getUUID(context);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeLong(uuid.first);
dos.writeLong(uuid.second);
return baos.toByteArray();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public synchronized static String getIDAsString(Context context) {
byte[] b = getIDAsBytes(context);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream printStream = new PrintStream(baos);
printStream.printf("%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8], b[9], b[10], b[11], b[12], b[13], b[14], b[15]);
return new String(baos.toByteArray());
}
private static Pair<Long, Long> readUUID(File installation) {
if (uuid != null) {
return uuid;
}
try {
DataInputStream in = new DataInputStream(new FileInputStream(installation));
Long msb = in.readLong();
Long lsb = in.readLong();
in.close();
return new Pair<Long, Long>(msb, lsb);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}